package 剑指offer;

import org.omg.CORBA.NO_IMPLEMENT;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class 剑指offer35复杂链表的复制 {

    public static Node copyRandomList(Node head) {
        //通过映射，将原来的节点设置为k，新节点是指为value
        Map<Node,Node> map = new HashMap<>();
        //对原链表进行遍历，并创建新的NOde，作为value值
        Node temp = head;
        while (temp != null){
            Node valueNode = new Node(temp.val,temp.random,temp.random);
            map.put(temp,valueNode);
            temp = temp.next;
        }
        //在进行遍历，通过key的next和random来这是额value的next和random，
        temp = head;
        while (temp != null){
            Node valueNode = map.get(temp);
            valueNode.next = map.get(temp.next);
            valueNode.random = map.get(temp.random);
            temp = temp.next;
        }
        //返回第一个value，采用这个函数，函数内部会考虑为空的情况，为空，返回空，不为空，返回值
        return map.getOrDefault(head,null);
    }
}
class Node {
    int val;
    Node next;
    Node random;

    public Node(int val, Object o, Object o1) {
        this.val = val;
        this.next = null;
        this.random = null;
    }
}
